package net.board.action;
//처음 게시판에 들어오거나 목록의 페이지 번호를 눌렀을 때 작업을 처리할 클래스


import java.io.PrintWriter;
import java.util.*;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.board.db.BoardBean;
import net.board.db.BoardDAO;

 public class BoardListAction implements Action {
	 //Action 인터페이스로부터 상속받은 메서드 재정의
	 public ActionForward execute(HttpServletRequest request,HttpServletResponse response) throws Exception{
		BoardDAO boarddao=new BoardDAO();
		List <BoardBean> boardlist=new ArrayList <BoardBean> ();
		
		//처음 불러질 때 사용할 페이지 번호를 설정
		int page=1;
		//한 페이지에 출력될 데이터 개수를 설정
		int limit=10;
		//request 객체에 page라는 속성이 있다면
		//목록 보기에서 다른 페이지 번호를 눌러서 호출된 것 이라면
		if(request.getParameter("page")!=null){
			//페이지 번호를 넘겨온 페이지 번호로 변경
			page=Integer.parseInt(request.getParameter("page"));
		}
		//BoardDAO 의 메서드를 호출해서 전체 데이터 개수와 출력될 데이터를 가져와서 저장
		int listcount=boarddao.getListCount(); //총 리스트 수를 받아옴
		boardlist = boarddao.getBoardList(page,limit); //리스트를 받아옴
		
		//총 페이지 수
 		int maxpage=(int)((double)listcount/limit+0.95); //0.95를 더해서 올림 처리
 		//현재 페이지에 보여줄 시작 게시물 번호
 		int startpage = (((int) ((double)page / 10 + 0.9)) - 1) * 10 + 1;
 		//현재 페이지에 보여줄 마지막 게시물 번호
		int endpage = startpage+10-1;

		//마지막 페이지 번호가 maxpage보다 크다면 
		//마지막 페이지 번호를 maxpage로 설정
 		if (endpage> maxpage) endpage= maxpage;
 		
 		//다음 request 된 페이지로 데이터를 가져가기위해서 저장
 		
 		request.setAttribute("page", page); //현재 페이지 수
 		request.setAttribute("maxpage", maxpage); //최대 페이지 수
 		request.setAttribute("startpage", startpage); //현재 페이지에 표시할 첫 페이지 수
 		request.setAttribute("endpage", endpage); //현재 페이지에 표시할 끝 페이지 수
		request.setAttribute("listcount",listcount); //글 수
		request.setAttribute("boardlist", boardlist);
		
		
		//리다이렉트 여부와 이동할 페이지를 설정
		ActionForward forward= new ActionForward();
	 	forward.setRedirect(false);//리다이렉트는 false로
 		forward.setPath("./board/qna_board_list.jsp");
 		return forward;
	 }
 }